import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Created by dllo on 18/5/14.
 */
@WebServlet(name = "BServlet", urlPatterns = "/b")
public class BServlet extends HttpServlet {
    // 请求转发,留头不留体
    // 即设置的响应头会保留下来,但是,响应体以最终转被转发到的
    // servlet为准,其他响应体 都会被抛弃
    /*请求转发 和请求重定向的区别
    1. 请求转发是一个请求 一次响应,而请求重定向是多次响应
    2. 请求转发地址栏不变,而重定向后会显示一个新的请求地址
    3.请求转发只能转发到本项目的其他服务器,而重定向则没有限制,
    本项目也行,其他网站也行
    4. 请求转发是服务器行为,只需要给出转发的服务器路径
    而重定向是浏览器行为
    5. 请求转发效率高
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        // 写代码
        System.out.println("Bservlet");

        // 1.编码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        // 2.拿数据
        String username = request.getParameter("username");
        // 3.校验
        boolean starWithNum = false;
        for (int i = 0; i < 9; i++) {
            if (username.startsWith(String.valueOf(i))) {
                starWithNum = true;
            }
        }

        // 根据校验结果的不同,转发到不同的servlet
        RequestDispatcher rd = null;
        if (starWithNum) {
            rd = request.getRequestDispatcher("/c");
        } else {
            rd = request.getRequestDispatcher("/a");
        }

        // RequestDispatcher rd = request.getRequestDispatcher("/a");
        // 请求转发
        // 虽然真正的干活的是AServlet
        // 但是浏览器的网站是不变的,还是以为访问的是b
        // 这样 可以吟唱真正干活的服务器路径
        rd.forward(request, response);
        // 请求留头又留体
        // rd.include(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        doPost(request, response);
    }
}
